package com.jungle.base.word;

import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.data.Rows;
import com.deepoove.poi.policy.AbstractRenderPolicy;
import com.deepoove.poi.policy.TableRenderPolicy;
import com.deepoove.poi.render.RenderContext;
import com.deepoove.poi.util.TableTools;
import com.deepoove.poi.util.UnitUtils;
import com.deepoove.poi.xwpf.BodyContainer;
import com.deepoove.poi.xwpf.BodyContainerFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.core.service.MagicAPIService;
import org.ssssssss.magicapi.core.service.impl.DefaultMagicAPIService;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Slf4j
@RequiredArgsConstructor
public class CustomJzzyTableRenderPolicy extends AbstractRenderPolicy<Object> {

    final private MagicAPIService service;

    @Override
    protected void afterRender(RenderContext<Object> context) {
        // 清空标签
        clearPlaceholder(context, true);
    }

    @Override
    public void doRender(RenderContext<Object> context) throws Exception {
//        Map<String, List<YjJzzyVo>> group = (Map<String, List<YjJzzyVo>>) context.getData();
//        if (group == null) return;
//        Set<String> xlmcSet = group.keySet();
//        for (String xlmc : xlmcSet) {
//            XWPFRun run = context.getRun();
//            BodyContainer bodyContainer = BodyContainerFactory.getBodyContainer(run);
//
//            List<YjJzzyVo> allJzzy = group.get(xlmc);
//            XWPFTable table = bodyContainer.insertNewTable(run, 1, 4);
//            //删除多余单元格
//            table.removeRow(table.getRows().size() - 1);
//
////            run.addCarriageReturn();
////            run.addBreak();
//
//            //预计到达时间(小时)
////            double speed =30D;
//            //设置表格内容
//            List<RowRenderData> rowJzzyList = new ArrayList<>();
//            for (YjJzzyVo yjJzzy : allJzzy) {
//                //添加承载体内容
//                if (yjJzzy.getJzzymc() != null && yjJzzy.getXzqhmc() != null) {
//                    double jl = BigDecimal.valueOf(yjJzzy.getJl()).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP).doubleValue();//（减灾资源与灾源距离 km）
//                    String arriveTime = BigDecimal.valueOf((Double) service.invoke("/rules/goJzzyTime", Map.of("distance",yjJzzy.getJl()))).setScale(2, RoundingMode.HALF_UP).toString();
//                    RowRenderData cztContent = Rows.of(yjJzzy.getJzzymc(), yjJzzy.getXzqhmc(), String.valueOf(jl), arriveTime)
//                        .center().create();
//                    rowJzzyList.add(cztContent);
//                    log.info("---------------------预计到达时间（小时）："+arriveTime);
//                }
//            }
//
//            RowRenderData r1 = Rows.of(allJzzy.get(0).getJzzyxl(), null, null, null).center().bgColor("d8d8d8").create();
//            RowRenderData r2 = Rows.of("名称", "地址", "距离（km）", "预计到达时间（分钟）").center().bgColor("d8d8d8").create();
//            //添加固定行
//            rowJzzyList.add(r2);
//            rowJzzyList.add(r1);
//            rowJzzyList.forEach(rowRenderData -> log.info("rowRenderData----------" + rowRenderData));
//            // 循环插入行
//            for (RowRenderData rowJzzy : rowJzzyList) {
//                XWPFTableRow insertNewTableRow = table.insertNewTableRow(0);
//                double[] cellWidth = {3.6, 3.6, 3, 4.43};
//                for (int j = 0; j < 4; j++)
//                    insertNewTableRow.createCell().setWidth(UnitUtils.cm2Twips(cellWidth[j]) + "");
//                // 单行渲染
//                TableRenderPolicy.Helper.renderRow(table.getRow(0), rowJzzy);
//            }
//
//            TableTools.mergeCellsHorizonal(table, 0, 0, 3);
//
//            //添加一个换行
//            bodyContainer.insertNewParagraph(run);
//        }


        /*
        自动换行
        HSSFCellStyle cellStyle=workbook.createCellStyle();
cellStyle.setWrapText(true);
cell.setCellStyle(cellStyle);
         */

        // 1) 调用XWPFTable API操作表格
        // 2) 调用TableRenderPolicy.Helper.renderRow方法快速方便的渲染一行数据
        // 3) 调用TableTools类方法操作表格，比如合并单元格
        // ......

       /*
       TableTools.mergeCellsHorizonal(table, 0, 0, 7);//合并行
        TableTools.mergeCellsVertically(table, 0, 1, 9);//合并列


        MergeCellRule rule = MergeCellRule.builder().map(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(0, 2)).build();
            TableRenderData tableRenderData = Tables.of(r1, r2).mergeRule(rule).create();
        */


//        XWPFRun run = context.getRun();
//        BodyContainer bodyContainer = BodyContainerFactory.getBodyContainer(run);
//        // 定义行列
//        int row = 10, col = 8;
//        // 插入表格
//        XWPFTable table = bodyContainer.insertNewTable(run, row, col);
//
//        // 表格宽度
//        TableTools.setWidth(table, UnitUtils.cm2Twips(14.63f) + "", null);
//        // 边框和样式
//        TableTools.borderTable(table, BorderStyle.DEFAULT);
//
//        // 1) 调用XWPFTable API操作表格
//        // 2) 调用TableRenderPolicy.Helper.renderRow方法快速方便的渲染一行数据
//        // 3) 调用TableTools类方法操作表格，比如合并单元格
//        // ......
//        TableTools.mergeCellsHorizonal(table, 0, 0, 7);
//        TableTools.mergeCellsVertically(table, 0, 1, 9);
    }


}
